package com.delivery.deliverysystem.common;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 储存会话信息到内存里面
 * 但部署到服务器不能多处使用，因此改为分布式的redis缓存处理
 */
public class SessionManager {
    private static Map<String, String> activeSessions = new HashMap<>();
//    static {
//        // 创建一个ScheduledExecutorService实例，用于执行定时任务
//        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
//
//        // 每隔30分钟执行一次清除过期会话的操作
//        executor.scheduleAtFixedRate(() -> {
//            // 清除过期会话信息
//            clearExpiredSessions();
//        }, 0, 30, TimeUnit.MINUTES); // 初次执行延迟为0，之后每隔30分钟执行一次
//    }

    public static void loginUser(String username, String sessionToken) {
        // 在存储会话信息时，将会话创建时间也一并存储在 sessionToken 中
        long currentTime = System.currentTimeMillis();
        String sessionInfo = currentTime + ":" + sessionToken; // 在 sessionToken 中包含创建时间信息
        activeSessions.put(username, sessionInfo);
    }

    public static void logoutUser(String username) {
        // 用户退出登录时，从 activeSessions 中移除用户的会话信息
        activeSessions.remove(username);
    }

    public static boolean isUserLoggedIn(String username) {
        // 检查用户是否已经登录
        return activeSessions.containsKey(username);
    }

    public static void invalidateUserSession(String username) {
        // 使用户的会话失效，类似强制用户下线的操作
        activeSessions.remove(username);
    }
//    public static void clearExpiredSessions() {
//        long sessionTimeout = 30 * 60 * 1000; // 30分钟的会话超时时间，单位为毫秒
//        long currentTime = System.currentTimeMillis();
//
//        // 创建一个副本以避免ConcurrentModificationException
//        Map<String, String> copyActiveSessions = new HashMap<>(activeSessions);
//
//        for (Map.Entry<String, String> entry : copyActiveSessions.entrySet()) {
//            String username = entry.getKey();
//            String sessionInfo = entry.getValue();
//
//            // 解析 sessionInfo，获取会话创建时间和实际会话令牌
//            String[] parts = sessionInfo.split(":");
//            long sessionCreationTime = Long.parseLong(parts[0]);
//            String sessionToken = parts[1];
//
//            // 检查会话是否过期
//            if (currentTime - sessionCreationTime > sessionTimeout) {
//                // 会话过期，移除此会话
//                activeSessions.remove(username);
//                System.out.println("30分钟后自动清除session: " + username);
//            }
//        }
//    }
}